题解:P10265 [GESP样题 七级] 迷宫统计

封面

思路:

首先看题,让我们求迷宫 mm 可以直接到达其他的迷宫有多少个,有多少迷宫可以直接到达 mm 号迷宫,和这些迷宫的总和

先看迷宫 mm 可以直接到达其他的迷宫,是什么意思呢?

其实就是让我们看当历遍的迷宫是 mm 时有多少个为真。

由此得出代码:

for(int i=1;i<=n;i++){
if(jz[m][i]==1){ // 我们只用查看 m 迷宫有多少个 1
sum1++;
}
}

然后我们看多少迷宫可以直接到达 mm 号迷宫,这又是什么意思呢?

其实就是查看有多少个迷宫的 mm 也就是 jz[i][m]jz[i][m] 为真。

由此得出代码:

for(int i=1;i<=n;i++){
if(jz[i][m]==1)sumzj++;
}

让我们看一下这两份代码循环的条件是不是相同的?

是对吧,由此合并两份代码:

for(int i=1;i<=n;i++){
if(jz[m][i]==1){
sum1++;
}
if(jz[i][m]==1)sumzj++;
}

最后看这些迷宫的总和,没有坑直接输出就行。

完整代码

#include<bits/stdc++.h>
using namespace std;
bool jz[1001][1001];
long long sumzj;
long long sum1;
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>jz[i][j];
}
}
for(int i=1;i<=n;i++){
if(jz[m][i]==1){
sum1++;
}
if(jz[i][m]==1)sumzj++;
}
cout<<sum1<<" "<<sumzj<<" "<<sum1+sumzj;

return 0;
}